package business;

import business.EmpregadoBO;
import business.EmpregadoException;
import java.text.SimpleDateFormat;
import java.text.ParseException;
import java.util.Calendar;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;

public class EmpregadoBOTestDatasComDataHoje {
    
    public EmpregadoBOTestDatasComDataHoje() {
    }

    @BeforeClass
    public static void setUpClass() throws Exception {
    }

    @AfterClass
    public static void tearDownClass() throws Exception {
    }
    
    @Before
    public void setUp() {
    }
    
    @After
    public void tearDown() {
    }
    
    /**
     * Testes do método que verifica se a data de nascimento, a data de admissão 
     * e a data de desligamento não são posteriores à data de hoje.
     * 
     * @author Zeno
     * 
     */
    
    @Test(expected = EmpregadoException.class) 
    public void testVerificaDataNascimentoAdmissaoDesligamentoDepoisHoje() throws EmpregadoException, Exception, ParseException {
        
        SimpleDateFormat formatar = new SimpleDateFormat("dd/MM/yyyy");
        
        Calendar dataNasc = Calendar.getInstance();
        dataNasc.add(Calendar.YEAR, 9); 
        String dataNascimento = formatar.format(dataNasc.getTime());
        
        Calendar dataAdm = Calendar.getInstance();
        dataAdm.add(Calendar.YEAR, 2); 
        String dataAdmissao = formatar.format(dataAdm.getTime());
        
        Calendar dataDesl = Calendar.getInstance();
        dataDesl.add(Calendar.YEAR, 9); 
        String dataDesligamento = formatar.format(dataDesl.getTime());
        
        dataHojeInvalida(dataNascimento, dataAdmissao, dataDesligamento);
    }
    
    @Test
    public void testVerificaDataNascimentoAdmissaoDesligamentoAntesHoje() throws EmpregadoException, Exception, ParseException {
        
        SimpleDateFormat formatar = new SimpleDateFormat("dd/MM/yyyy");
        
        Calendar dataNasc = Calendar.getInstance();
        dataNasc.add(Calendar.YEAR, -9); 
        String dataNascimento = formatar.format(dataNasc.getTime());
        
        Calendar dataAdm = Calendar.getInstance();
        dataAdm.add(Calendar.YEAR, -2); 
        String dataAdmissao = formatar.format(dataAdm.getTime());
        
        Calendar dataDesl = Calendar.getInstance();
        dataDesl.add(Calendar.YEAR, -9); 
        String dataDesligamento = formatar.format(dataDesl.getTime());
        
        dataHojeInvalida(dataNascimento, dataAdmissao, dataDesligamento);
    }
    
    @Test(expected = EmpregadoException.class) 
    public void testVerificaDataAdmissaoDesligamentoDepoisHoje() throws EmpregadoException, Exception, ParseException {
        
        SimpleDateFormat formatar = new SimpleDateFormat("dd/MM/yyyy");
        
        Calendar dataNasc = Calendar.getInstance();
        dataNasc.add(Calendar.YEAR, -9); 
        String dataNascimento = formatar.format(dataNasc.getTime());
        
        Calendar dataAdm = Calendar.getInstance();
        dataAdm.add(Calendar.YEAR, 1); 
        String dataAdmissao = formatar.format(dataAdm.getTime());
        
        Calendar dataDesl = Calendar.getInstance();
        dataDesl.add(Calendar.YEAR, 5); 
        String dataDesligamento = formatar.format(dataDesl.getTime());
        
        dataHojeInvalida(dataNascimento, dataAdmissao, dataDesligamento);
    }
    
    @Test(expected = EmpregadoException.class) 
    public void testVerificaDataAdmissaoDesligamentoAntesHoje() throws EmpregadoException, Exception, ParseException {
        
        SimpleDateFormat formatar = new SimpleDateFormat("dd/MM/yyyy");
        
        Calendar dataNasc = Calendar.getInstance();
        dataNasc.add(Calendar.YEAR, 9); 
        String dataNascimento = formatar.format(dataNasc.getTime());
        
        Calendar dataAdm = Calendar.getInstance();
        dataAdm.add(Calendar.YEAR, -2); 
        String dataAdmissao = formatar.format(dataAdm.getTime());
        
        Calendar dataDesl = Calendar.getInstance();
        dataDesl.add(Calendar.YEAR, -5); 
        String dataDesligamento = formatar.format(dataDesl.getTime());
        
        dataHojeInvalida(dataNascimento, dataAdmissao, dataDesligamento);
    }
    
    @Test(expected = EmpregadoException.class) 
    public void testDataNascimentoDesligamentoDepoisHoje() throws EmpregadoException, Exception, ParseException {
        
        SimpleDateFormat formatar = new SimpleDateFormat("dd/MM/yyyy");
        
        Calendar dataNasc = Calendar.getInstance();
        dataNasc.add(Calendar.YEAR, 9); 
        String dataNascimento = formatar.format(dataNasc.getTime());
        
        Calendar dataAdm = Calendar.getInstance();
        dataAdm.add(Calendar.YEAR, -2); 
        String dataAdmissao = formatar.format(dataAdm.getTime());
        
        Calendar dataDesl = Calendar.getInstance();
        dataDesl.add(Calendar.YEAR, 9); 
        String dataDesligamento = formatar.format(dataDesl.getTime());
        
        dataHojeInvalida(dataNascimento, dataAdmissao, dataDesligamento);
        
    }
    
    @Test(expected = EmpregadoException.class) 
    public void testDataNascimentoDesligamentoAntesHoje() throws EmpregadoException, Exception, ParseException {
        
        SimpleDateFormat formatar = new SimpleDateFormat("dd/MM/yyyy");
        
        Calendar dataNasc = Calendar.getInstance();
        dataNasc.add(Calendar.YEAR, -9); 
        String dataNascimento = formatar.format(dataNasc.getTime());
        
        Calendar dataAdm = Calendar.getInstance();
        dataAdm.add(Calendar.YEAR, 2); 
        String dataAdmissao = formatar.format(dataAdm.getTime());
        
        Calendar dataDesl = Calendar.getInstance();
        dataDesl.add(Calendar.YEAR, -9); 
        String dataDesligamento = formatar.format(dataDesl.getTime());
        
        dataHojeInvalida(dataNascimento, dataAdmissao, dataDesligamento);
        
    }
    
    @Test(expected = EmpregadoException.class) 
    public void testDataNascimentoAdmissaoDepoisHoje() throws EmpregadoException, Exception, ParseException {
        
        SimpleDateFormat formatar = new SimpleDateFormat("dd/MM/yyyy");
        
        Calendar dataNasc = Calendar.getInstance();
        dataNasc.add(Calendar.YEAR, 9); 
        String dataNascimento = formatar.format(dataNasc.getTime());
        
        Calendar dataAdm = Calendar.getInstance();
        dataAdm.add(Calendar.YEAR, 2); 
        String dataAdmissao = formatar.format(dataAdm.getTime());
        
        Calendar dataDesl = Calendar.getInstance();
        dataDesl.add(Calendar.YEAR, -9); 
        String dataDesligamento = formatar.format(dataDesl.getTime());
        
        dataHojeInvalida(dataNascimento, dataAdmissao, dataDesligamento);
        
    }
    
    @Test(expected = EmpregadoException.class) 
    public void testDataNascimentoAdmissaoAntesHoje() throws EmpregadoException, Exception, ParseException {
        
        SimpleDateFormat formatar = new SimpleDateFormat("dd/MM/yyyy");
        
        Calendar dataNasc = Calendar.getInstance();
        dataNasc.add(Calendar.YEAR, -9); 
        String dataNascimento = formatar.format(dataNasc.getTime());
        
        Calendar dataAdm = Calendar.getInstance();
        dataNasc.add(Calendar.YEAR, -9); 
        String dataAdmissao = formatar.format(dataAdm.getTime());
        
        Calendar dataDesl = Calendar.getInstance();
        dataDesl.add(Calendar.YEAR, 9); 
        String dataDesligamento = formatar.format(dataDesl.getTime());
        
        dataHojeInvalida(dataNascimento, dataAdmissao, dataDesligamento);
        
    }
    
    private void dataHojeValida(String dataNascimento, String dataAdmissao, String dataDesligamento) throws EmpregadoException, Exception, ParseException {
        boolean valido = EmpregadoBO.getInstance().validaDatasComDataHoje(dataNascimento, dataAdmissao, dataDesligamento);
        assertEquals(true, valido);
    }
    
    private void dataHojeInvalida(String dataNascimento, String dataAdmissao, String dataDesligamento) throws EmpregadoException, ParseException {
        boolean invalido = EmpregadoBO.getInstance().validaDatasComDataHoje(dataNascimento, dataAdmissao, dataDesligamento);
    }
    
}
